A Domain Name System (DNS) is a hierarchically distributed naming system that associates certain information, such as Internet Protocol (IP) addresses, with domain names assigned to each of participating entities. Specifically, the DNS resolves queries for the purpose of locating computer services or devices worldwide. For example, the DNS is widely used to translate human-friendly computer hostnames or domain names into IP addresses. Users take advantage of this when they recite meaningful Uniform Resource Locators (URLs) and e-mail addresses without having to know how the computer actually locates the services. In other words, the DNS is a hierarchical distributed database that associates typed data of many kinds with domain names.
DNS servers include recursive DNS servers and authoritative DNS servers. A recursive DNS server may answer a client query using a corresponding cache entry in its database. If the recursive server cannot answer the client query because the database does not contain the entry, it may recursively query authoritative DNS servers (proceeding from the root of the DNS tree down) until the answer is found. This is known as a recursive query or recursive lookup.
To improve customer experience in Content Delivery Networks (CDNs) and other situations, there is an extension to the DNS called client-subnet. This extension gives the authority information about the CIDR block of the querying client, and the response may also be associated with a CIDR block. This allows the answer to vary by CIDR block. A CIDR block is an \ Internet Protocol (IP) v4 or v6 address and a decimal number signifying the number of bits in the network portion of the address. The size of the routing prefix dictates the size of the subnet. For example, a CIDR block 192.168.100.0/22 represents the 1024 addresses from 192.168.100.0 to 192.168.103.255. In order to be efficient with respect to CPU, memory, and network bandwidth, the prefix lengths should be as small as possible, however this is often not practical in the real world due to the inability to effectively aggregate related blocks due to unrelated blocks being nearby in the address space.
For example, an ISP may have a very granular allocation policy. It may allocate /25 subnets (i.e. with 128 hosts on each) as follows:
London 10.0.0.0/25
Bermuda 10.0.0.128/25
London 10.0.1.0/25
The two London subnets are geographically and topologically similar and it would be beneficial to aggregate them into a bigger block. However, these subnets are not adjacent and therefore cannot be aggregated into a bigger subnet, such as a /24 or /23 without incidentally aggregating the Bermuda subnet that is not similar and should not be aggregated into the same subnet. This inability to usefully aggregate greatly increases the network, processing, and memory resources when using traditional client-subnet compared to not using it, and can be an operational problem for real-world servers.
Additionally, any aggregation without involvement of the Internet Service Provider (ISP) is bound to be suboptimal because knowledge of the network is essential to successful aggregation.